﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using BLL.Validation;
using Utilities;
using Entities;

namespace BLL
{
    public class NhanVienManager : IValidator<NguoiDung>
    {
        //public static List<NguoiDung> _LayDuLieuNhanVien()
        //{
        //    return NhanVienProvider._LayDuLieuNhanVien();
        //}

        public static ActionResultAsList<NguoiDung> _LayDuLieuNhanVien()
        {
            var aResult = new ActionResultAsList<NguoiDung>();
            try
            {
                aResult.Result = NhanVienProvider._LayDuLieuNhanVien();
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public static ActionResultAsList<NguoiDung> TimDanhSachNhanVien(object a, SoSanh ss)
        {
            var aResult = new ActionResultAsList<NguoiDung>();
            try
            {
                aResult.Result = NhanVienProvider.TimDanhSachNhanVien(a, ss);
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public static ActionResult<NguoiDung> LayNguoiDungTheoUsername(string username)
        {
            var aResult = new ActionResult<NguoiDung>();
            try
            {
                aResult.Result = NhanVienProvider.LayNguoiDungTheoUsername(username);
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        //public static bool XoaNhanVien(int maNV)
        //{
        //    return NhanVienProvider.XoaNhanVien(maNV);
        //}

        public static ActionResult<bool> XoaNhanVien(int maNV)
        {
            var aResult = new ActionResult<bool>();
            try
            {
                aResult.Result = NhanVienProvider.XoaNhanVien(maNV);
                if (!aResult.Result)
                {
                    aResult.Exceptions.Add(new Exception("Xóa nhân viên không thành công"));
                }
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        //public static bool CapNhatNguoiDung(NguoiDung ngd)
        //{
        //    return NhanVienProvider.CapNhatNguoiDung(ngd);
        //}

        public static ActionResult<bool> CapNhatNguoiDung(NguoiDung ngd)
        {
            var aResult = new ActionResult<bool>();
            try
            {
                aResult.Result = NhanVienProvider.CapNhatNguoiDung(ngd);
                if (!aResult.Result)
                {
                    aResult.Exceptions.Add(new Exception("Cập nhật thông tin nhân viên không thành công"));
                }
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }
        //public static int ThemNguoiDung(NguoiDung nd)
        //{
        //    return NhanVienProvider.ThemNguoiDung(nd);
        //}

        public static ActionResult<int> ThemNguoiDung(NguoiDung nd)
        {
            var aResult = new ActionResult<int>();
            try
            {
                aResult.Result = NhanVienProvider.ThemNguoiDung(nd);
                if (aResult.Result <= 0)
                {
                    aResult.Exceptions.Add(new Exception("Thêm nhân viên mới không thành công"));
                }
            }
            catch (Exception ex)
            {
                aResult.Exceptions.Add(ex);
            }
            return aResult;
        }

        public ValidationResult Validate(NguoiDung obj)
        {
            var vResult = new ValidationResult();

            if (string.IsNullOrEmpty(obj.HoTen.Trim()))
            {
                vResult.Message.Add("Tên nhân viên phải khác chuỗi rỗng");
            }

            if (!string.IsNullOrEmpty(obj.Email.Trim()))
            {
                if (!StringExtensions.IsEmailAddress(obj.Email))
                {
                    vResult.Message.Add("Địa chỉ email không hợp lệ");
                }
            }
            else
            {
                vResult.Message.Add("Địa chỉ email phải khác chuỗi rỗng");
            }

            if (!string.IsNullOrEmpty(obj.SoDT.Trim()))
            {
                if (!StringExtensions.IsPhoneNumber(obj.SoDT))
                {
                    vResult.Message.Add("Số điện thoại không hợp lệ");
                }
            }
            else
            {
                vResult.Message.Add("Số điện thoại phải khác chuỗi rỗng");
            }

            if (!string.IsNullOrEmpty(obj.Username))
            {
                var aResult = NhanVienProvider.LayNguoiDungTheoUsername(obj.Username);
                if (aResult.MaNV > 0)
                {
                    vResult.Message.Add("Tên đăng nhập đã tồn tại");
                }
            }
            else
            {
                vResult.Message.Add("Tên đăng nhập phải khác chuỗi rỗng");
            }

            if (string.IsNullOrEmpty(obj.Password))
            {
                vResult.Message.Add("Mật khẩu phải khác chuỗi rỗng");
            }

            if (string.IsNullOrEmpty(obj.DiaChi))
            {
                vResult.Message.Add("Địa chỉ phải khác chuỗi rỗng");
            }

            if (string.IsNullOrEmpty(obj.ChucVu))
            {
                vResult.Message.Add("Chức vụ phải khác chuỗi rỗng");
            }

            return vResult;
        }
    }
}
